package org.jsola.hr.service;

import javax.validation.constraints.NotNull;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpCardDAO;
import org.jsola.hr.dto.EmpCardAddDTO;
import org.jsola.hr.dto.EmpCardDTO;
import org.jsola.hr.dto.EmpCardUpdateDTO;
import org.jsola.hr.entity.EmpCardDO;
import org.jsola.hr.query.EmpCardQuery;
import org.jsola.hr.vo.EmpCardListVO;
import org.jsola.hr.vo.EmpCardVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface IEmpCardService extends IService<IEmpCardDAO, EmpCardDO> {

    /**
     * 新增员工证件信息
     * @param empCardAddDTO 新增员工证件信息DTO
     * @param tokenUser 当前用户
     * @return 员工证件信息详情信息
     */
    EmpCardVO save(EmpCardAddDTO empCardAddDTO, TokenUser tokenUser);

    /**
     * 修改员工证件信息
     * @param empCardUpdateDTO 修改员工证件信息DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(EmpCardUpdateDTO empCardUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除员工证件信息，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param empCardIds 员工证件信息id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...empCardIds);

    /**
     * 根据员工证件信息id查找
     * @param empCardId 员工证件信息id
     * @param siteId 所属站点id
     * @return 员工证件信息详情信息
     */
    EmpCardVO selectById(String empCardId, String siteId);

    /**
     * 查询员工证件信息
     * @param empCardQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工证件信息列表信息
     */
    List<EmpCardListVO> select(EmpCardQuery empCardQuery, String siteId);

    /**
    * 查询员工证件信息记录数
    * @param empCardQuery 查询条件
    * @param siteId 所属站点id
    * @return 员工证件信息记录数
    */
    int selectCount(EmpCardQuery empCardQuery, String siteId);

    /**
     * 分页查询员工证件信息
     * @param empCardQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工证件信息列表信息
     */
    Page<EmpCardListVO> selectPage(EmpCardQuery empCardQuery, String siteId);


    /**
     * 根据员工证件信息id查找
     * @param empCardId 员工证件信息id
     * @param siteId 所属站点id
     * @return 员工证件信息
     */
    EmpCardDO selectDOById(String empCardId, String siteId);

    /**
     * 查询员工证件信息
     * @param empCardQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工证件信息列表
     */
    List<EmpCardDO> selectDO(EmpCardQuery empCardQuery, String siteId);

    /**
     * 根据公司id删除部门
     *
     * @param companyId 公司id
     * @param tokenUser 当前用户
     */
    void deleteByCompanyId(@NotNull String companyId, TokenUser tokenUser);

    /**
     * 证件信息
     *
     * @param empCardList 证件信息
     * @param companyId   公司id
     * @param empId       人员id
     * @param tokenUser   当前用户
     */
    void publishEmpCardList(List<EmpCardDTO> empCardList, String companyId, String empId, TokenUser tokenUser);

    /**
     * 查找某员工的所有证件照
     *
     * @param empId  员工id
     * @param siteId 站点
     * @return 员工的所有证件照
     */
    List<EmpCardDO> listByEmpId(String empId, String siteId);
}


